home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / MAXOFT.TST / MAXOFTST.C < prev    next >
C/C++ Source or Header  |  1996-01-10  |  3KB  |  95 lines

  1. /* ============ */
  2. /* maxoftst.c    */
  3. /* ============ */
  4. #include <defcodes.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <maxtdefs.h>
  8. #include <miscdefs.h>
  9.  
  10. #define    NUM_FINAL    100
  11. /* ===================================================================== */
  12. /* MaxofT - Applies Kolgomorov-Smirnov to a Maximum-of-t random sequence */
  13. /* ===================================================================== */
  14. void
  15. main()
  16. {
  17.     int     i;
  18.     double  KnMinusProb, KnMinusStat, KnPlusProb, KnPlusStat;
  19.  
  20.     double  KnPosProb[NUM_FINAL];
  21.     double  KnNegProb[NUM_FINAL];
  22.  
  23.     MAXT_DATA_STRU  MaxtData;
  24.     INIT_DATA_STRU  InitialData;
  25.  
  26.     AbortGracefully();            /* Make ^C act reasonably */
  27.  
  28.     printf("\tM A X I M U M  O F  T  T E S T\n\n");
  29.     GetInitialData(&InitialData);
  30.     fprintf(stderr, "\n"); fflush(NULL);
  31.     /* -------------------------- */
  32.     /* Print Initial Data Entries */
  33.     /* -------------------------- */
  34.     printf("\nStarting Seed = %u%s\n", InitialData.UserSeed,
  35.     (InitialData.SeedSrce == (UINT)(-1)) ?
  36.         " (Unsigned Integer Part of Time of Day)" : "");
  37.     printf("Generator     = %s\n", InitialData.GenName);
  38.  
  39.     MaxtData.RandFun = InitialData.RandFun;
  40.  
  41.     SetMaxOfTControls(&MaxtData);
  42.  
  43.     /* --------------------------------- */
  44.     /* Initialize Randon Variate Counter */
  45.     /* --------------------------------- */
  46.     MaxtData.TotNumGen = 0;
  47.  
  48.     fflush(NULL);
  49.     /* ----------------------------- */
  50.     /* Gather Data for KS-on-KS Test */
  51.     /* ----------------------------- */
  52.     for (i = 0; i < NUM_FINAL; ++i)
  53.     {
  54.     ApplyKStoMaxOfT(&MaxtData);
  55.  
  56.     fprintf(stderr, "\rPass %3d (of %d), %8ld  Total Random Numbers",
  57.         i+1, NUM_FINAL, MaxtData.TotNumGen);
  58.  
  59.     KnPosProb[i] = MaxtData.ProbKSPos;
  60.     KnNegProb[i] = MaxtData.ProbKSNeg;
  61.     }
  62.     fflush(NULL);
  63.     printf("\nResults for KS-on-KS Test:\n");
  64.     /* ---------------------------------------------- */
  65.     /* Calculate Statistics and Probabilities for Kn+ */
  66.     /* ---------------------------------------------- */
  67.     KSCalc(KnPosProb, NUM_FINAL, &KnPlusStat, &KnPlusProb,
  68.     &KnMinusStat, &KnMinusProb);
  69.  
  70.     printf("\nStatistics and Probabilities for Kn+\n");
  71.  
  72.     printf("\tK(%d)+ = %f (Knuth) or %9f%%\n", NUM_FINAL,
  73.     sqrt((double)NUM_FINAL)*KnPlusStat, 100*KnPlusProb);
  74.  
  75.     printf("\tK(%d)- = %f (Knuth) or %9f%%\n", NUM_FINAL,
  76.     sqrt((double)NUM_FINAL)*KnMinusStat, 100*KnMinusProb);
  77.  
  78.     /* ---------------------------------------------- */
  79.     /* Calculate Statistics and Probabilities for Kn- */
  80.     /* ---------------------------------------------- */
  81.     KSCalc(KnNegProb, NUM_FINAL, &KnPlusStat, &KnPlusProb,
  82.     &KnMinusStat, &KnMinusProb);
  83.  
  84.     printf("\nStatistics and Probabilities for Kn-\n");
  85.  
  86.     printf("\tK(%d)+ = %f (Knuth) or %9f%%\n", NUM_FINAL,
  87.     sqrt((double)NUM_FINAL)*KnPlusStat, 100*KnPlusProb);
  88.  
  89.     printf("\tK(%d)- = %f (Knuth) or %9f%%\n", NUM_FINAL,
  90.     sqrt((double)NUM_FINAL)*KnMinusStat, 100*KnMinusProb);
  91.  
  92.     printf("\nThis Run Required %ld Random Numbers\n",
  93.     MaxtData.TotNumGen);
  94. }
  95.